/* Доступ к регистрам ввода/вывода */

/* Определим SFR (Регистры Общего Назначения) для чипа AT90S2313 */

sfrb PORTB=0x18; 	// Объясняем компилятору по каким адресам находятся
sfrb DDRB=0x17; 	// те или иные регистры (порты). Т.к. все используемые
sfrb PINB=0x16; 	// регистры 8 разрядные, то к ним осуществляется
// 8-битовый доступ с помощью sfrb. Обычно эти
// операторы располагаются в заголовочных файлах
// (см. "Доступ к Регистрам Ввода/Вывода", стр. 353)
int a, b, c; 	// Объявляем целые переменные a, b, c

/* Основная функция программы */
void main(void)
{
/* Зададим направление выводов Порта B */

DDRB.0=0; 		// зададим биты 0...3 Порта B как входы
DDRB.1=0; 		//
DDRB.2=0; 		//
DDRB.3=0; 		//

DDRB.4=1; 		// зададим биты 4...7 Порта B как выходы
DDRB.5=1; 		//
DDRB.6=1; 		//
DDRB.7=1; 		//

/* Установим выводы Порта B */

PORTB.0=0; 		// установим биты 0 и 1 Порта B как
PORTB.1=0; 		// простые входы

PORTB.2=1; 		// установим биты 2 и 3 Порта B как "входы с
PORTB.3=1; 		// подтяжкой", т.е. каждый из этих выводов через
// резистор примерно 100-150 кОм будет соединен
// с шиной питания. Таким образом, в отсутствии
// сигнала на этих выводах будет уровень
// логической 1
PORTB.4=0; 		// установим биты 4 и 5 Порта B как выходы, на
PORTB.5=0; 		// которых установлен уровень логического 0

PORTB.6=1; 		// установим биты 6 и 7 Порта B как выходы, на
PORTB.7=1; 		// которых установлен уровень логической 1

/* опросим выводы Порта B, т.е. их физические значения */

a=PINB.0; 		// Переменной a присвоим значение вывода 0
// Порта B, т.е. значение сигнала, на выводе 0
b=PINB.5; 		// Переменной b присвоим значение вывода 5
// Порта B, т.е. b=0
c=PINB.6; 		// Переменной c присвоим значение вывода 6
// Порта B, т.е. c=1
if (PINB.2) 			// Если на выводе 2 Порта B логическая 1,
{ 					// то выполняется [группа операторов1];
[группа операторов1]
}
else 					// если 0 - то [группа операторов2]
{
[группа операторов2]
}
...
}
